/**
 * Created with IntelliJ IDEA.
 * Description:给你一个长度固定的整数数组 arr ，请你将该数组中出现的每个零都复写一遍，并将其余的元素向右平移。
 *
 * 注意：请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改，不要从函数返回任何东西。
 * User: wangxin
 * Date: 2025-03-12
 * Time: 21:41
 */
public class Test2 {
    //官方解
    public void duplicateZeros(int[] arr) {
        int n = arr.length;
        int top = 0;
        int i = -1;
        while (top < n) {
            i++;
            if (arr[i] != 0) {
                top++;
            } else {
                top += 2;
            }
        }
        int j = n - 1;
        if (top == n + 1) {
            arr[j] = 0;
            j--;
            i--;
        }
        while (j >= 0) {
            arr[j] = arr[i];
            j--;
            if (arr[i] == 0) {
                arr[j] = arr[i];
                j--;
            }
            i--;
        }
    }
    //自己写的解
    public void duplicateZeros2(int[] arr) {
        int i = 0;;
        while(i < arr.length-1){
            if(arr[i] == 0){
                for(int j = arr.length-1;j > i;j--){
                    arr[j] = arr[j-1];
                }
                i++;
            }
            i++;
        }

    }
}
